home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / oper_sys / oasis / ossxmpls.lha / examples / lips.d < prev    next >
Encoding:
Text File  |  1992-03-25  |  729 b   |  26 lines

  1. #include "lips.h"
  2. lips {
  3. /*======================================================================
  4.         Naive  Reverse  for  1000  LIPS
  5. ======================================================================*/
  6.  
  7. lips(0).
  8. lips(N') |- rev(); rev(); lips(N-1).
  9.  
  10. rev() :- r(); 1 < 0.
  11. rev().
  12.  
  13. # r performs 496 LI's on 30-element list.
  14. r() |- reverse([1, 2, 3, 4, 5, 6, 7, 8, 9, 0,
  15.                 1, 2, 3, 4, 5, 6, 7, 8, 9, 0,
  16.                 1, 2, 3, 4, 5, 6, 7, 8, 9, 0], _).
  17.  
  18. # reverse applied to N-element list performs 1/2(N*N + 3*N + 2) LI's.
  19. reverse([], []).
  20. reverse([X'|Xs'], Zs) |- reverse(Xs, Ys');
  21.                          append(Ys, [X], Zs').
  22.  
  23. append([], Ys', Ys).
  24. append([X'|Xs'], Ys', [X|Zs]) |- append(Xs, Ys, Zs').
  25. }
  26.